# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Container.V1.Model.NodeNetworkConfig do
  @moduledoc """
  Parameters for node pool-level network config.

  ## Attributes

  *   `additionalNodeNetworkConfigs` (*type:* `list(GoogleApi.Container.V1.Model.AdditionalNodeNetworkConfig.t)`, *default:* `nil`) - We specify the additional node networks for this node pool using this list. Each node network corresponds to an additional interface
  *   `additionalPodNetworkConfigs` (*type:* `list(GoogleApi.Container.V1.Model.AdditionalPodNetworkConfig.t)`, *default:* `nil`) - We specify the additional pod networks for this node pool using this list. Each pod network corresponds to an additional alias IP range for the node
  *   `createPodRange` (*type:* `boolean()`, *default:* `nil`) - Input only. Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. This field cannot be changed after the node pool has been created.
  *   `enablePrivateNodes` (*type:* `boolean()`, *default:* `nil`) - Whether nodes have internal IP addresses only. If enable_private_nodes is not specified, then the value is derived from Cluster.NetworkConfig.default_enable_private_nodes
  *   `networkPerformanceConfig` (*type:* `GoogleApi.Container.V1.Model.NetworkPerformanceConfig.t`, *default:* `nil`) - Network bandwidth tier configuration.
  *   `podCidrOverprovisionConfig` (*type:* `GoogleApi.Container.V1.Model.PodCIDROverprovisionConfig.t`, *default:* `nil`) - [PRIVATE FIELD] Pod CIDR size overprovisioning config for the nodepool. Pod CIDR size per node depends on max_pods_per_node. By default, the value of max_pods_per_node is rounded off to next power of 2 and we then double that to get the size of pod CIDR block per node. Example: max_pods_per_node of 30 would result in 64 IPs (/26). This config can disable the doubling of IPs (we still round off to next power of 2) Example: max_pods_per_node of 30 will result in 32 IPs (/27) when overprovisioning is disabled.
  *   `podIpv4CidrBlock` (*type:* `String.t`, *default:* `nil`) - The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. This field cannot be changed after the node pool has been created.
  *   `podIpv4RangeUtilization` (*type:* `float()`, *default:* `nil`) - Output only. The utilization of the IPv4 range for the pod. The ratio is Usage/[Total number of IPs in the secondary range], Usage=numNodes*numZones*podIPsPerNode.
  *   `podRange` (*type:* `String.t`, *default:* `nil`) - The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. This field cannot be changed after the node pool has been created.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :additionalNodeNetworkConfigs =>
            list(GoogleApi.Container.V1.Model.AdditionalNodeNetworkConfig.t()) | nil,
          :additionalPodNetworkConfigs =>
            list(GoogleApi.Container.V1.Model.AdditionalPodNetworkConfig.t()) | nil,
          :createPodRange => boolean() | nil,
          :enablePrivateNodes => boolean() | nil,
          :networkPerformanceConfig =>
            GoogleApi.Container.V1.Model.NetworkPerformanceConfig.t() | nil,
          :podCidrOverprovisionConfig =>
            GoogleApi.Container.V1.Model.PodCIDROverprovisionConfig.t() | nil,
          :podIpv4CidrBlock => String.t() | nil,
          :podIpv4RangeUtilization => float() | nil,
          :podRange => String.t() | nil
        }

  field(:additionalNodeNetworkConfigs,
    as: GoogleApi.Container.V1.Model.AdditionalNodeNetworkConfig,
    type: :list
  )

  field(:additionalPodNetworkConfigs,
    as: GoogleApi.Container.V1.Model.AdditionalPodNetworkConfig,
    type: :list
  )

  field(:createPodRange)
  field(:enablePrivateNodes)
  field(:networkPerformanceConfig, as: GoogleApi.Container.V1.Model.NetworkPerformanceConfig)
  field(:podCidrOverprovisionConfig, as: GoogleApi.Container.V1.Model.PodCIDROverprovisionConfig)
  field(:podIpv4CidrBlock)
  field(:podIpv4RangeUtilization)
  field(:podRange)
end

defimpl Poison.Decoder, for: GoogleApi.Container.V1.Model.NodeNetworkConfig do
  def decode(value, options) do
    GoogleApi.Container.V1.Model.NodeNetworkConfig.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Container.V1.Model.NodeNetworkConfig do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
